import {AuthConfig} from "angular-oauth2-oidc";
import {useSilentRefreshForCodeFlow} from "../../flags";
//import { useSilentRefreshForCodeFlow } from './flags';

export const authConfig: AuthConfig = {
  // 你的身份验证服务器配置
  issuer: 'http://127.0.0.1:9000',
  //客户端id
  clientId: 'client-angular', // The "Auth Code + PKCE" client  //interactive.public

  /**
   * 认证服务器需要一个密钥
   * 设置一个虚拟的秘密
   * 请注意，这里使用的auth-server要求客户端传输客户端密钥，
   * 尽管标准明确指出密码流也可以在没有密钥的情况下使用。
   * 对于在浏览器中运行的SPA来说，使用客户端密钥没有意义。
   * 这就是为什么这个属性被命名为dummyClientSecret的原因。
   * 使用这个虚拟密钥和不使用密钥一样安全。
   * */
  dummyClientSecret: '123456',  //口令 userName password 时使用
  responseType: 'code',

  // 授权服务器的端点，允许用户在使用隐式流时登录。authorize  login  oauth2/authorize  message.write
  //loginUrl: 'http://127.0.0.1:9000/login', // 隐式流 对应端点, /oauth2/authorize should-login  login/oauth2/code/messaging-client-angular-oidc
  //收到code=ddfgdf时,调用此路径，然后换取accessToken
  redirectUri: window.location.origin +
    (localStorage.getItem('useHashLocationStrategy') === 'true'
      ? '/#/index.html'
      : '/index.html')
      , //fallback index.html window.location.origin+'/success',//'http://127.0.0.1:9000/oauth/authorize', //window.location.origin + '/fallback', //fallback  index.html 127.0.0.1

  //这对于静默刷新(没有refresh_token的刷新令牌)和弹出登录都是需要的
  silentRefreshRedirectUri: `${window.location.origin}/silent-refresh.html`, //window.location.origin + '/silent-refresh.html',
  silentRefreshMessagePrefix: '',
  silentRefreshShowIFrame: false,
  useSilentRefresh: true, // true表示选择静默刷新,Needed for Code Flow to suggest using iframe-based refreshes
  silentRefreshIFrameName: 'angular-oauth-oidc-silent-refresh-iframe',  //angular-oauth-oidc-silent-refresh-iframe
  //useRefreshToken: true,
  silentRefreshTimeout: 5000, // For faster testing 5000=5秒
  timeoutFactor: 0.75, // For faster testing 0.25 生命周期过半时，0.5 它通常是一个乘数，用于在默认值基础上增加额外的时间余量，以防止因网络延迟或其他延迟因素导致的令牌过期

  //请注意，至少在使用idsvr时，offline_access是不需要静默刷新的，这甚至会阻止静默刷新，因为idsvr在请求此范围时总是提示用户同意
  scope: useSilentRefreshForCodeFlow
         ? 'openid profile email api message.read' //必须和服务器messaging-client-angular-oidc中的设置匹配,不是gitee或GitHub，可以少，不能多
         : 'openid profile email offline_access api message.read', // 可以少，不能多于服务器注册的 Ask offline_access to support refresh token refreshes

  /*
  * 要将这个库与ID Provider一起使用，在发现文档端点之间不保持一致的基本URL，请在配置中将' strictDiscoveryDocumentValidation '参数设置为' false ':
  * */
  strictDiscoveryDocumentValidation: false,  //缺省是true

  sessionChecksEnabled: false,  //Spring授权服务器不直接支持会话检查，因此需要使用iframe  connect/logout
  sessionCheckIFrameUrl: 'http://127.0.0.1:9000/session-check', // 替换为实际的URL, https://your-auth-server.com/session-check,
  sessionCheckIFrameName: 'angular-oauth-oidc-check-session-iframe',
  //sessionCheckIntervall: 3000,

  skipIssuerCheck: false,  //true
  disableAtHashCheck: false,  //true
  useHttpBasicAuth: true,  //false
  //silentRefreshPostMessageEventListener: ,
  oidc: false, //true,  //口令时为false 定义在隐式流期间是否使用OpenId Connect。

  // Revocation endpoint 吊销端点
  revocationEndpoint: 'http://127.0.0.1:9000/oauth2/revoke',
  //postLogoutRedirectUri: 'http://127.0.0.1:4200/index.html', // 默认回调到redirectUri http://127.0.0.1:9000/connect/logout  window.location.origin+'',
  //redirectUriAsPostLogoutRedirectUriFallback: true, //默认true,即使用redirectUri
  // authorityEndpoint: 'http://127.0.0.1:9000/oauth2/authorize',
  logoutUrl: 'http://127.0.0.1:9000/connect/logout',  // oauth2/logout ,connect/logout

  // Login-Url
  // tokenEndpoint: 'http://127.0.0.1:9000/oauth2/token',

  //http://127.0.0.1:9000/.well-known/openid-configuration jwks.json
  //jwks: 'http://127.0.0.1:9000/oauth2/jwks',
  // resource: 'api',  //表示客户端试图访问的受保护资源，默认为api
  // rngUrl: 'http://127.0.0.1:9000/oauth2/token',  //通常用于获取随机数的URL

  requireHttps: false,
  showDebugInformation: true, // Also requires enabling "Verbose" level in devtools
  clearHashAfterLogin: true, //old false,隐藏式法登录后清除hash，选true https://github.com/manfredsteyer/angular-oauth2-oidc/issues/457#issuecomment-431807040,
  nonceStateSeparator : 'semicolon', //SAMEORIGIN  semicolon Real semicolon gets mangled by Duende ID Server's URI encoding

  clockSkewInSec: 0.5,   //时钟同步 0.5秒

  //使用初始化隐式流时附加到请求的附加查询参数进行映射,您可以将属性' ' customQueryParams ' '设置为一个散列hash，其中包含启动隐式流时传输的自定义参数。
  // customQueryParams: {
  //   //custom_param: 'custom_value'
  // },

  // openUri: (url: string) => { //http://127.0.0.1:9000/oauth2/authorize
  //   url = url.replace('http://127.0.0.1:4200/login', 'http://127.0.0.1:9000');
  //   console.log('openUri', url);
  //   window.open(url, '_blank');
  // }
}
